도구 결과 전송

Anthropic
Claude에서 열기
이 강좌에 대해 질문하기
노트 복사
LLM용 전체 강좌 노트 복사

Claude가 도구 호출을 요청한 후, 함수를 실행하고 결과를 다시 전송해야 합니다. 이 단계를 통해 Claude가 요청한 정보를 제공하여 도구 사용 워크플로를 완료합니다.

도구 함수 실행

Claude가 도구 사용 블록으로 응답하면, 입력 매개변수를 추출하여 함수를 호출합니다. 도구 매개변수에 접근하는 방법은 다음과 같습니다:

response.content[1].input

이렇게 하면 Claude가 함수에 전달하려는 인수의 딕셔너리를 얻을 수 있습니다. 함수가 딕셔너리가 아닌 키워드 인수를 기대하므로, Python의 언패킹 문법을 사용합니다:

get_current_datetime(**response.content[1].input)

도구 결과 블록

도구 함수를 실행한 후, 도구 결과 블록을 사용하여 결과를 Claude에 다시 전송해야 합니다. 이 블록은 사용자 메시지 안에 포함되며, 도구를 실행했을 때 무슨 일이 일어났는지 Claude에게 알려줍니다.

도구 결과 블록에는 몇 가지 중요한 속성이 있습니다:

  • tool_use_id - 이 ToolResult가 대응하는 ToolUse 블록의 id와 일치해야 합니다
  • content - 도구 실행 결과를 문자열로 직렬화한 출력값
  • is_error - 오류가 발생한 경우 True

여러 도구 호출 처리

Claude는 단일 응답에서 여러 도구 호출을 요청할 수 있습니다. 예를 들어, 사용자가 "10 + 10은 얼마이고 30 + 30은 얼마인가요?"라고 물으면, Claude는 두 개의 별도 ToolUse 블록으로 응답할 수 있습니다.

각 도구 호출에는 고유한 ID가 부여되며, 결과를 다시 전송할 때 이 ID를 맞춰야 합니다. 이를 통해 결과가 다른 순서로 도착하더라도 Claude가 어떤 결과가 어떤 요청에 해당하는지 알 수 있습니다.

후속 요청 구성

Claude에 대한 후속 요청에는 전체 대화 기록과 새로운 도구 결과가 포함되어야 합니다. 구조는 다음과 같습니다:

messages.append({
    "role": "user",
    "content": [{
        "type": "tool_result",
        "tool_use_id": response.content[1].id,
        "content": "15:04:22",
        "is_error": False
    }]
})

이제 완전한 메시지 기록에는 다음이 포함됩니다:

  • 원래 사용자 메시지
  • 도구 사용 블록이 포함된 어시스턴트 메시지
  • 도구 결과 블록이 포함된 사용자 메시지

최종 요청 보내기

후속 요청을 전송할 때, Claude가 다른 도구 호출을 할 것으로 예상하지 않더라도 도구 스키마를 포함해야 합니다. Claude는 대화 기록의 도구 참조를 이해하기 위해 스키마가 필요합니다.

client.messages.create(
    model=model,
    max_tokens=1000,
    messages=messages,
    tools=[get_current_datetime_schema]
)

그러면 Claude는 도구 결과를 사용자를 위한 자연스러운 응답에 통합한 최종 메시지로 응답합니다. 이제 도구 사용 워크플로가 완료되었습니다 - 사용자 정의 함수를 통해 Claude가 실시간 정보에 접근할 수 있도록 성공적으로 설정했습니다.